package com.lzh.o2o.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.lzh.o2o.dao.ProductCategoryDao;
import com.lzh.o2o.dao.ProductDao;
import com.lzh.o2o.dto.ProductCategoryExecution;
import com.lzh.o2o.enums.ProductCategoryStateEnum;
import com.lzh.o2o.exception.ProductCategoryOperationException;
import com.lzh.o2o.pojo.ProductCategory;
import com.lzh.o2o.pojo.ShopCategory;
import com.lzh.o2o.service.ProductCategoryService;
import com.lzh.o2o.service.ShopCategoryService;

/** 
* @author  haohao: 
* @date 创建时间：2018年9月13日 下午7:01:37 
* @version 1.0 
* @parameter 
* @since  
* @return  
*/
@Service
public class ProductCategoryServiceImpl implements ProductCategoryService {
	@Autowired
	private ProductCategoryDao productCategoryDao;

	@Autowired
	private ProductDao productDao;
	@Override
	//根据商铺Id查出该商铺拥有的所有商品类别
	public List<ProductCategory> getProductCategoryList(Long shopId) {
		return productCategoryDao.queryProductCategoryList(shopId);
	}

	@Override
	@Transactional
	//批量增加商品列表
	public ProductCategoryExecution batchAddProductCategory(List<ProductCategory> productCategoryList) 
	throws ProductCategoryOperationException{
		//判断传入的要插入的商品列表是否为空
		if(productCategoryList!=null && productCategoryList.size()>0){
			try{
				//获取影响的行数
				int effectNum = productCategoryDao.batchInsertProductCategory(productCategoryList);
				if(effectNum<=0){
					//如果影响的行数少0，则店铺类别创建失败
					throw new ProductCategoryOperationException("店铺类别创建失败");
				}else{
					//如果有影响的行数，店铺类别创建成功与状态码
					return new ProductCategoryExecution(ProductCategoryStateEnum.SUCCESS);
				}
				
			}catch(ProductCategoryOperationException e){
				//异常返回批量增加商品类别失败
				throw new ProductCategoryOperationException("batchAddProductCategory error"+e.getMessage());
			}
		}else{
			//传入的商品list为空值。
			return new ProductCategoryExecution(ProductCategoryStateEnum.EMPTY_LIST);

		}
		
	
	}

	@Override
	@Transactional
	public ProductCategoryExecution deleteProductCategory(long productCategoryId, long shopId)
			throws ProductCategoryOperationException {
		// TODO 将此商品类别下的商品的类别id制为空
		//解除tb_product里的商品与该类别的关系
		try{
			int effectedNum = productDao.updateProductCategoryToNull(productCategoryId);
			if(effectedNum<0){
				throw new ProductCategoryOperationException("商品类别更新失败");
			}
		}catch(Exception e){
			throw new ProductCategoryOperationException("deleteProductCate ERROR"+e.getMessage());

		}
		
		try{
			//调用Dao层删除商品类别，如果该商品类别有商品，先把该商品对应的商品类别为空
			int effectedNum = productCategoryDao.deleteProductCategory(productCategoryId, shopId);
			if(effectedNum <=0){
				throw new ProductCategoryOperationException("商品类别删除失败");
			}else{
				return new ProductCategoryExecution(ProductCategoryStateEnum.SUCCESS);
			}
		}catch(Exception e){
			throw new ProductCategoryOperationException("deleteProductCate ERROR"+e.getMessage());

		}
	
	}



}
